高动态范围和低动态范围示例(使用相机响应函数)

简短说明

文件: \examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Bayer.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Color.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Gray.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_4xCxp2L.vad

默认平台: mE5-MA-VCL, imaFlex CXP-12 Quad

简要说明

基于 Debevec 和 Malik 的 HDR 算法,以及基于 Reinhard 等人和 Fattal 等人的 LDR 算法。

High Dynamic Range (HDR) 图像能够再现高动态范围的光照。因此,非常暗和非常亮的细节可以组合在同一张图像中。 在大多数摄影技术中,很难通过单个 Exposure Time 实现如此高的光照范围。因此,HDR 图像是由不同 Exposure Time 的图像创建的。 大多数显示器无法直接显示 HDR 图像。因此,为了显示 HDR 图像,必须将其亮度对比度按比例缩减为 Low Dynamic Range (LDR) 图像。此过程也称为色调映射。在此 VisualApplets 示例中,实现了根据 Debevec 和 Malik [Deb97] 的 HDR 算法。 LDR 算法基于 Reinhard [Rei02] 和 Fattal [Fat02]。接下来将简要解释这两种算法。

高动态范围成像

像素值 在具有像素坐标 和 的图像 i 中,可以表示为辐照度值 和 Exposure Time :

方程式 32。


的函数 当我们定义

时,得出:


公式 33。 我们将 称为响应曲线。 它将 Exposure Time 下的像素值 . 与场景辐照度关联起来。假定 和 , 对每个像素都是恒定的。 在已知的情况下,可以通过奇异值分解方法 [Deb97 ] 计算。 现在可以使用以下表达式创建 HDR 图像 [的情况下,可以通过奇异值分解方法 []:

方程式 34。


其中 是生成的 HDR 图像中像素 x,y 处的对数辐照度值(基数 )。对于彩色图像 是红色、绿色和蓝色值 (, 和 )。 也就是说, 方程式 34 必须分别针对红色、绿色和蓝色值进行计算。 是曝光次数。 在 方程式 34 是一个加权函数:

方程式 35。


低动态范围成像

拜耳和彩色图像

为了显示 HDR 图像,必须降低亮度对比度。根据 Reinhard 等人 [Rei02] 的研究,LDR 亮度 可以计算为:

公式 36。


此处 是缩放后的 HDR 亮度:

公式 37。


参数 用于调整所显示 LDR 图像的亮度。 典型值在 0.09 到 0.72 之间 [Rei02]。所谓的相对“世界”亮度 由 HDR 颜色计算得出: , 和 :

公式 38。


平均值 在此示例中计算为

公式 39。


根据 Fattal 等人 [Fat02],LDR 颜色分量 , 和 现在可以重建为

公式 40。


灰度图像

用于在显示器上输出的灰度图像的 LDR 图像值 可以计算为:

公式 41。


此处 是根据以下内容进行 HDR 处理的结果 方程式 34. 是一个参数常数,可用于调整输出图像的亮度。

VisualApplets 设计

VisualApplets 中实现了用于拍摄具有极宽亮度范围且包含非常暗和非常亮物体的场景的 HDR/LDR 算法,分别适用于灰度(“HDR_CRC_Gray.vad”)、Bayer(“HDR_CRC_Bayer.vad”)和彩色(“HDR_CRC_Color.vad”)相机图像。 传输到 PC 的图像中,场景的每个物体都能得到正确显示。 设计“HDR_CRC_Bayer.vad”的基本结构如图 347 所示。所有示例都遵循相同的原则。 对于 Bayer 模式原始图像,每个图像像素的红色、绿色和蓝色值是在带有 Bayer5x5Linear 算子的 HierarchicalBox Bayer 中计算的。此 Box 是示例“HDR_CRC_Bayer.vad”的唯一内容。 在 Box ImageSequence 中,对三幅图像的序列进行了缓存。这三幅图像应具有三个不同的 Exposure Time,以便进行 HDR-LDR 处理。 选择 Exposure Time 时应确保每个图像像素在曝光序列的至少一幅图像中既不欠曝也不过曝。 您可以使用 HierarchicalBox Trigger(参见图 348)中的算子 SignalWidth width1 到 width3 来设置这些时间。 请注意,时间刻度是 8 ns 的系统时钟周期。算子 Generate-Period 必须设置为大于算子 SignalWidth width1 到 width3 的最长时间的值。此外,请参阅相机手册中关于算子 Generate-Period 的最短周期长度说明。 这三幅图像使用上文所述的 Debevec 和 Malik [Deb97] 的 HDR 算法进行组合。该算法在 HierarchicalBox HDR(图 347)中实现。对于灰度、Bayer 和彩色图像,其实现方式是相同的。 LDR 算法在 LDR 中实现。彩色/Bayer 图像和灰度图像的实现方式有所不同(参见小节 和 )。生成的 RGB 图像的颜色在 HierarchicalBox OutputToPC 中进行合并。此 Box 在示例“HDR_CRC_Gray.vad”中不存在。 算子 SourceSelector 用于选择传输处理后的 HDR-LDR 图像还是(经过 Bayer 插值的)相机图像的 DMA 传输。

基本设计结构

图 347. 基本设计结构


Box Trigger 的内容

图 348. Box Trigger 的内容


在图中 349 您可以查看 HierarchicalBox 的内容 HDR。对于缓冲图像序列的三个图像,分子 和分母 的 方程式 34 针对第一张到第三张图像(HierarchicalBox Image1 变为 Image3) 分别针对红色、绿色和蓝色。

box HDR 的内容

图 349. Box HDR 的内容


在图中 350 您可以将此计算视为图像 1 的红色(在 HierarchicalBox 中 红色 在 box 中 Image1) 的示例。所有图像的所有颜色都以相同的方式处理。相机响应曲线 (CRC) 的对数值通过 HierarchicalBox 中的查找表分配给(红/绿/蓝)像素值 over127 如果像素值大于 127 或在 Box 中 underequal127 如果像素值小于等于 127。这些查找表的内容 gO127 和 g_ueq_127 对于红色、绿色和蓝色,可以使用 Matlab 程序模块“HDR_CRC.m”、“sample.m”和“gsolve.m”(位于 \examples\Processing\Advanced\HighDynamicRange\ 下)计算得出,这些模块基于 Debevec 和 Malik [ 的代码的情况下,可以通过奇异值分解方法 [],并部分基于 M. Eitz 的示例 [Eit07]。 请阅读“HDR_CRC.m”中的简短手册,了解有关如何使用该代码的进一步说明。 使用 CONST 运算符 LNdt1 (以及针对图像 2 和 3 的类似 LNdt2 和 LNdt3 )可以设置 Exposure Time 的对数(以 e 为底)值。请注意,此值必须乘以 因为有 16 个小数位。 对应的时间基准可以通过参数进行选择 LNTimeBase。 , 或 将时间刻度设置为秒、毫秒或微秒。在查找表中 weight 中查看框 350 的权重函数 方程式 35 已实现。利用 Matlab 程序模块“HDR_CRC.m”、“sample.m”和“Weight.m”,可以创建权重表“Weights.txt”。同时请参阅“HDR_CRC.m”(或用于灰度图像的“HDR_CRC_Gray.m”)中的简要手册以获取进一步说明。HierarchicalBox 的最终输出 红色 (以及针对图像 2 和 3 的类似 绿色 和 蓝色) 在框 Image1 (以及针对图像 2 和 3 的类似 Image2 和 Image3) 中,然后 和 .

Image1 中 Red 分量的内容

图 350. Image1 中的 Red 分量内容


回到图 349 作为框的内容 HDR。 HDR 彩色分量对数值的计算 , 和 根据 方程式 34 在框中执行 红色, 绿色 和 蓝色。 分子所有分量的求和 和 分母 值以及最终相除在此处实现 (例如参见图中的红色 351 )。

HDR 下 Red 框的内容

图 351. HDR 下 Red 框的内容


此框 卢 中查看框 349 包含 HDR 颜色值的计算 , 和 根据它们的对数值。指数函数通过查找表实现。然后根据 HDR 颜色分量计算相对“世界”亮度“Lw”。 公式 38其平均值根据 公式 39 计算在方框中 Lw_d 在模块中 光敏电阻 (参见基本设计结构图。) 347)。全部内容 光敏电阻 如图所示。 352.

设计“HDR_CRC_Bayer.vad”和“HDR_CRC_Color.vad”中的盒装LDR内容

图 352. 设计“HDR_CRC_Bayer.vad”和“HDR_CRC_Color.vad”中盒状LDR的内容


该模块 左 包含根据以下方式计算缩放亮度: 公式 37 相对“世界”亮度与其平均值之比乘以“亮度参数” a通过更改此参数值,您可以更改最终处理图像的亮度。您可以在 VA 设计的注释框中找到此参数的合适值,或者如果您对此感兴趣,请参阅[Rei02] 进行计算。 LDR_亮度 根据以下公式计算 LDR 亮度: 公式 36最后,将此值与 HierarchicalBox 的输出相乘。 HDRColor , 和 分别针对红色、绿色和蓝色这三个颜色分量。随后,结果即为处理后输出图像的 LDR 颜色分量红色、绿色和蓝色 [Fat02]。 HierarchicalBox 的内容 光敏电阻 针对灰度图像的内容如图所示。 353.

设计“HDR_CRC_Gray.vad”中 LDR 框的内容

图 353. 设计“HDR_CRC_Gray.vad”中 LDR 框的内容


在 HierarchicalBox Exp_Ln 根据 其对数值计算得出 作为 HDR 处理的结果(方程式 34)。 在框中 SQRT 根据章节中的算法提取平方根 . 结果除以其自身 加 . 的值 并且输出图像的亮度可以通过算子设置 ShiftLeft_Brightness.